/**
 * Todo任务解析器
 * 读取todo.md并识别下一个高优先级未完成任务
 * 基于业务重要性排序：MCP工具 > 应用层 > 配置系统
 */

const fs = require('fs');
const path = require('path');

/**
 * 定义任务优先级映射
 * 数字越小优先级越高
 */
const PRIORITY_MAP = {
    // 高优先级 - MCP工具测试
    'compare_image_with_bounding_boxes': 1,
    'extract_component_hierarchy': 2,
    'get_exact_layout_specifications': 3,
    'list_provider_models': 4,
    'identify_visual_tokens': 5,
    'analyze_design_with_precision': 6,

    // 中高优先级 - 应用层
    'application.test.js': 10,
    'application': 10,

    // 中优先级 - 配置系统
    'config-manager': 20,
    'json-config-manager': 20,
    'config-path-resolver': 20,
    'validator': 20,

    // 低优先级 - 监控和其他
    'monitoring': 30,
    'logging': 30,
    'security': 30
};

/**
 * 从任务内容中提取优先级
 * @param {string} taskContent 任务内容
 * @returns {number} 优先级数字
 */
function extractPriority(taskContent) {
    const content = taskContent.toLowerCase();

    // 检查是否包含关键词来确定优先级
    for (const [keyword, priority] of Object.entries(PRIORITY_MAP)) {
        if (content.includes(keyword.toLowerCase())) {
            return priority;
        }
    }

    // 默认优先级
    return 50;
}

/**
 * 解析todo.md文件，提取所有未完成的任务
 * @param {string} todoFilePath todo.md文件路径
 * @returns {Array} 任务列表
 */
function parseTodoFile(todoFilePath = 'todo.md') {
    try {
        const fullPath = path.resolve(todoFilePath);
        const content = fs.readFileSync(fullPath, 'utf8');
        const lines = content.split('\n');

        const tasks = [];

        for (let i = 0; i < lines.length; i++) {
            const line = lines[i].trim();

            // 查找未完成的任务 (包含 [ ] 但不包含 [创建失败])
            if (line.includes('- [ ]') && !line.includes('[创建失败]')) {
                const taskContent = line.replace(/^\s*-\s*\[\s*\]\s*/, '');
                const priority = extractPriority(taskContent);

                tasks.push({
                    lineNumber: i + 1,
                    content: taskContent,
                    priority: priority,
                    category: getCategoryFromPriority(priority)
                });
            }
        }

        return tasks;
    } catch (error) {
        console.error('解析todo.md文件失败:', error.message);
        return [];
    }
}

/**
 * 根据优先级确定任务类别
 * @param {number} priority 优先级数字
 * @returns {string} 任务类别
 */
function getCategoryFromPriority(priority) {
    if (priority <= 9) return 'mcp';
    if (priority <= 15) return 'application';
    if (priority <= 25) return 'config';
    return 'other';
}

/**
 * 获取下一个高优先级未完成任务
 * @param {string} todoFilePath todo.md文件路径
 * @returns {Object|null} 下一个任务或null
 */
function getNextHighPriorityTask(todoFilePath = 'todo.md') {
    const tasks = parseTodoFile(todoFilePath);

    if (tasks.length === 0) {
        return null;
    }

    // 按优先级排序 (数字越小优先级越高)
    tasks.sort((a, b) => a.priority - b.priority);

    return tasks[0];
}

/**
 * 获取所有未完成任务，按优先级排序
 * @param {string} todoFilePath todo.md文件路径
 * @returns {Array} 排序后的任务列表
 */
function getAllTasksSorted(todoFilePath = 'todo.md') {
    const tasks = parseTodoFile(todoFilePath);

    // 按优先级排序
    tasks.sort((a, b) => a.priority - b.priority);

    return tasks;
}

/**
 * 获取任务统计信息
 * @param {string} todoFilePath todo.md文件路径
 * @returns {Object} 统计信息
 */
function getTaskStats(todoFilePath = 'todo.md') {
    const tasks = parseTodoFile(todoFilePath);

    const stats = {
        total: tasks.length,
        byCategory: {
            mcp: 0,
            application: 0,
            config: 0,
            other: 0
        },
        byPriority: {
            high: 0,    // 1-9
            medium: 0,  // 10-25
            low: 0      // 26+
        }
    };

    tasks.forEach(task => {
        // 按类别统计
        if (stats.byCategory[task.category] !== undefined) {
            stats.byCategory[task.category]++;
        }

        // 按优先级统计
        if (task.priority <= 9) {
            stats.byPriority.high++;
        } else if (task.priority <= 25) {
            stats.byPriority.medium++;
        } else {
            stats.byPriority.low++;
        }
    });

    return stats;
}

// 如果直接运行此脚本，显示当前任务信息
if (require.main === module) {
    const nextTask = getNextHighPriorityTask();
    const stats = getTaskStats();

    console.log('=== Todo任务解析结果 ===');
    console.log(`总任务数: ${stats.total}`);
    console.log(`按类别: MCP(${stats.byCategory.mcp}) | 应用层(${stats.byCategory.application}) | 配置(${stats.byCategory.config}) | 其他(${stats.byCategory.other})`);
    console.log(`按优先级: 高(${stats.byPriority.high}) | 中(${stats.byPriority.medium}) | 低(${stats.byPriority.low})`);
    console.log('');

    if (nextTask) {
        console.log('下一个高优先级任务:');
        console.log(`内容: ${nextTask.content}`);
        console.log(`优先级: ${nextTask.priority} (${nextTask.category})`);
        console.log(`行号: ${nextTask.lineNumber}`);
    } else {
        console.log('✅ 所有任务已完成！');
    }
}

module.exports = {
    parseTodoFile,
    getNextHighPriorityTask,
    getAllTasksSorted,
    getTaskStats,
    extractPriority,
    getCategoryFromPriority
};